// next里面的值会作为返回对象的value
// generator.next('bar')
// bar就会作为yield的返回值
// throw也会继续执行 得到一个异常
function ajax(url) {
  return new Promise(function(resolve,reject) {
  // 发送ajax请求
  var xhr = new XMLHttpRequest()
  xhr.open('GET',url)
  // responseType H5新增, 请求过后直接拿到一个json对象
  xhr.responseType = 'json'
  // H5 请求完成过后才会执行
  xhr.onload = function() {
    // 判断请求是否成功 => resolve/reject
    if(this.status === 200){ 
      resolve(this.response)
    } else {
      reject(new Error(this.statusText))
    }
  }
  // 执行异步请求
  xhr.send()
})}
function * main () {
  // 返回具有ajax调用的promise对象
  const users = yield ajax('/api/users.json')
  // 接收一下yield的返回值
  console.log(users);
  const posts = yield ajax('/api/posts.json')
  console.log(posts);
}
// 调用生成器函数得到生成器对象
const g = main()
// 执行到yield ajax
// yield能产生promise yield ajax就能产生 ajax promise对象

const result = g.next()
// 定义ajax promise需要xhr组合拳
console.log(result.value);
// { value: promise, done: false }
// result.value就是返回的ajax promise对象
// then指定ajax promise的回调 并拿到执行结果

result.value.then(data =>{
  // data就是执行结果
  const result2 = g.next(data)
  // [{...}.{...}]
  // undefined的时候 done才是true 
  if (result2.done) return
  result2.value.then(data=>{
    g.next(data)
    // [{...}.{...}], [{...}.{...}]
  })
})
